package util

import "fmt"

var ErrQueueIntIsEmpty = fmt.Errorf("is empty")

type QueueInt struct {
	Data []int
}

func (r *QueueInt) Push(v int) {
	r.Data = append(r.Data, v)
}

func (r *QueueInt) Pop(v int) (int, error) {
	if r.IsEmpty() {
		return 0, ErrQueueIntIsEmpty
	}
	tmp := r.Data[0]
	r.Data = r.Data[1:]
	return tmp, nil
}

func (r *QueueInt) IsEmpty() bool {
	if len(r.Data) == 0 {
		return true
	}
	return false
}

func (r *QueueInt) Peek(v int) (int, error) {
	if r.IsEmpty() {
		return 0, ErrQueueIntIsEmpty
	}
	return r.Data[0], nil
}


func NewQueueInt()*QueueInt{
	return &QueueInt{Data: []int{}}
}